package cn.iocoder.yudao.module.system.service.gugu;

import cn.iocoder.yudao.module.system.dal.mysql.gugu.MajorAdmissionMapper;
import cn.iocoder.yudao.module.system.dal.mysql.collegeenrollmentplan.CollegeEnrollmentPlanMapper;
import cn.iocoder.yudao.module.system.dal.dataobject.gugu.MajorAdmissionDO;
import cn.iocoder.yudao.module.system.dal.dataobject.collegeenrollmentplan.CollegeEnrollmentPlanDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 检查数据库中年份数据的工具类
 */
@Service
@Slf4j
public class CheckDatabaseYears {

    @Resource
    private MajorAdmissionMapper majorAdmissionMapper;

    @Resource
    private CollegeEnrollmentPlanMapper collegeEnrollmentPlanMapper;

    /**
     * 检查专业录取数据表中的年份
     */
    public void checkMajorAdmissionYears() {
        log.info("开始检查专业录取数据表中的年份...");
        
        try {
            // 查询所有数据
            List<MajorAdmissionDO> allData = majorAdmissionMapper.selectList();
            
            if (allData.isEmpty()) {
                log.warn("专业录取数据表中没有数据");
                return;
            }
            
            // 统计年份
            Set<Integer> years = allData.stream()
                    .map(MajorAdmissionDO::getYear)
                    .filter(year -> year != null)
                    .collect(Collectors.toSet());
            
            log.info("专业录取数据表中包含的年份: {}", years);
            log.info("专业录取数据总条数: {}", allData.size());
            
            // 按年份统计数据量
            for (Integer year : years) {
                long count = allData.stream()
                        .filter(data -> year.equals(data.getYear()))
                        .count();
                log.info("{}年的专业录取数据: {}条", year, count);
            }
            
        } catch (Exception e) {
            log.error("检查专业录取数据年份失败", e);
        }
    }

    /**
     * 检查招生计划数据表中的年份
     */
    public void checkEnrollmentPlanYears() {
        log.info("开始检查招生计划数据表中的年份...");
        
        try {
            // 查询所有数据
            List<CollegeEnrollmentPlanDO> allData = collegeEnrollmentPlanMapper.selectList();
            
            if (allData.isEmpty()) {
                log.warn("招生计划数据表中没有数据");
                return;
            }
            
            // 统计年份
            Set<Integer> years = allData.stream()
                    .map(CollegeEnrollmentPlanDO::getYear)
                    .filter(year -> year != null)
                    .collect(Collectors.toSet());
            
            log.info("招生计划数据表中包含的年份: {}", years);
            log.info("招生计划数据总条数: {}", allData.size());
            
            // 按年份统计数据量
            for (Integer year : years) {
                long count = allData.stream()
                        .filter(data -> year.equals(data.getYear()))
                        .count();
                log.info("{}年的招生计划数据: {}条", year, count);
            }
            
        } catch (Exception e) {
            log.error("检查招生计划数据年份失败", e);
        }
    }

    /**
     * 检查所有数据库表的年份
     */
    public void checkAllYears() {
        log.info("=== 开始检查数据库中的年份数据 ===");
        checkMajorAdmissionYears();
        checkEnrollmentPlanYears();
        log.info("=== 年份数据检查完成 ===");
    }
}
